package com.jingyanzi.member.service;

import com.jingyanzi.member.domain.AccountDO;
import com.jingyanzi.member.domain.AccountFinanceDO;
import com.jingyanzi.member.domain.AccountPayDO;
import com.jingyanzi.member.domain.AccountRechargeDO;
import com.jingyanzi.member.domain.result.ResultDO;
import com.jingyanzi.member.query.AccountFinanceQueryDO;
import com.jingyanzi.member.query.AccountPayQueryDO;
import com.jingyanzi.member.query.AccountQueryDO;
import com.jingyanzi.member.query.AccountRechargeQueryDO;

/**
 * 账户管理
 * @author 1q
 *
 */
/**
 * 账户管理 <b>Description:账户信息、充值、消费、资金记录等相关接口</b><br>
 * 
 * @author Reading.Reagan</a>
 * @version 1.0
 * @Note <b>ProjectName:</b> member-api <br>
 *       <b>PackageName:</b> com.jingyanzi.member.service <br>
 *       <b>ClassName:</b> IAccountService <br>
 *       <b>Date:</b> 2018年7月13日 上午10:42:30
 */
public interface IAccountService {

	/**
	 * 添加账户（创建客户时调用） <b>Description:添加账户,创建客户时调用</b><br>
	 * 
	 * @param domain
	 *            账户DO对象
	 * @return ResultDO 账户id
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年7月13日 上午10:09:07 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO add(AccountDO domain);

	/**
	 * 删除账户 <b>Description:删除账户</b><br>
	 * 
	 * @param id
	 *            账户id(同客户id)
	 * @return ResultDO
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年7月13日 上午10:09:47 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO remove(Integer id);

	/**
	 * 修改账户信息 <b>Description:修改账户信息</b><br>
	 * 
	 * @param domain
	 *            账户DO对象
	 * @return ResultDO
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年7月13日 上午10:10:15 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO modifi(AccountDO domain);

	/**
	 * 获得单个账户信息 <b>Description:获得单个账户信息，仅查询账户数据</b><br>
	 * 
	 * @param id
	 *            账户id(同客户id)
	 * @return ResultDO AccountDO 账户DO对象
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年7月13日 上午10:10:51 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO get(Integer id);

	/**
	 * 获取客户账户详情 <b>Description:获取客户账户详情，可得到账户及客户详细信息</b><br>
	 * 
	 * @param id
	 *            账户id（同客户id）
	 * @return ResultDO AccountDO 账户DO对象
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年7月13日 上午10:12:01 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO getAccountDetail(Integer id);

	/**
	 * 
	 * @param accountRechargeDO
	 * @return
	 */
	/**
	 * 生成账户充值订单 <b>Description:页面提交充值后，写入账户充值记录（状态为未支付）</b><br>
	 * 
	 * @param accountRechargeDO
	 * @return ResultDO
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年7月13日 上午10:23:30 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO recharge(AccountRechargeDO accountRechargeDO);

	/**
	 * 删除账户充值记录 <b>Description: 未成功创建收银台订单时，删除已添加的充值记录</b><br>
	 * 
	 * @param id
	 *            充值记录id
	 * @return ResultDO
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年7月13日 上午10:26:07 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO removeRecharge(Integer id);

	/**
	 * 与账户余额相关交易记录
	 * <b>Description:账户余额相关交易（充值、余额支付）收银成功后，更新账户相关信息（充值订单表、账户表、资金记录表）</b><br>
	 * 
	 * @param accountFinanceDO
	 *            账户资金DO对象
	 * @return ResultDO
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年7月13日 上午10:27:35 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO addFinanceRecord(AccountFinanceDO accountFinanceDO);

	/**
	 * 添加客户消费记录 <b>Description:客户消费记录，与客户相关的账单，订单、加选、购买会员等等，收银成功后调用）</b><br>
	 * 
	 * @param accountPay
	 *            消费DO对象
	 * @return ResultDO
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年7月13日 上午10:31:47 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO addPay(AccountPayDO accountPay);

	/**
	 * 客户消费记录查询 <b>Description:查询客户消费记录列表</b><br>
	 * 
	 * @param accountPayQueryDO
	 *            消费查询DO对象
	 * @return ResultDO List<AccountPayDO> 消费列表
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年7月13日 上午10:32:42 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO queryPay(AccountPayQueryDO accountPayQueryDO);

	/**
	 * 账户资金记录查询 <b>Description:查询账户资金记录</b><br>
	 * 
	 * @param accountFinanceQueryDO
	 *            资金查询DO对象
	 * @return ResultDO List<AccountFinanceDO> 资金查询列表
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年7月13日 上午10:33:56 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO queryFinance(AccountFinanceQueryDO accountFinanceQueryDO);

	/**
	 * 客户账户查询 <b>Description:客户账户查询</b><br>
	 * 
	 * @param accountQueryDO
	 * @return ResultDO List<AccountDO> 客户列表
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年7月13日 上午10:35:04 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO queryAccount(AccountQueryDO accountQueryDO);

	/**
	 * 充值订单列表查询 <b>Description:充值订单列表查询</b><br>
	 * 
	 * @param accountRechargeQueryDO
	 * @return ResultDO List<AccountRechargeDO> 充值记录列表
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年7月13日 上午10:40:05 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO queryAccountRecharge(AccountRechargeQueryDO accountRechargeQueryDO);
}
